📚 Cos'è XML?
XML (eXtensible Markup Language) è un linguaggio di markup progettato per memorizzare e trasportare dati in modo strutturato, leggibile sia dalle macchine che dagli esseri umani.
- eXtensible: puoi creare i tuoi tag personalizzati
- Self-descriptive: i dati descrivono se stessi
- Text-based: completamente in formato testo
- Platform-independent: funziona su qualsiasi sistema
- Standard W3C: riconosciuto universalmente
XML vs HTML: Qual è la Differenza?
| Caratteristica | XML | HTML |
|---|---|---|
| Scopo | Memorizzare e trasportare dati | Visualizzare dati |
| Tag | Definiti dall'utente (estensibili) | Predefiniti (es. <p>, <div>) |
| Sintassi | Molto rigorosa (case-sensitive) | Più permissiva |
| Focus | Struttura e significato dei dati | Presentazione dei dati |
| Chiusura tag | SEMPRE obbligatoria | A volte opzionale |
XML è ideale per:
- Scambio di dati tra sistemi diversi
- File di configurazione
- Documenti strutturati complessi
- Web services (SOAP)
- Feed RSS
- Formati di file (Microsoft Office, SVG, Android layouts)
🏗️ Struttura Base di un Documento XML
Il Primo Documento XML
<?xml version="1.0" encoding="UTF-8"?>
<messaggio>
Ciao, mondo!
</messaggio>
Analisi:
- Riga 1: Dichiarazione XML (versione e codifica)
- Riga 2: Tag di apertura
<messaggio> - Riga 3: Contenuto testuale
- Riga 4: Tag di chiusura
</messaggio>
Componenti di un Documento XML
1️⃣ Dichiarazione XML (Prolog)
<?xml version="1.0" encoding="UTF-8"?>
Opzionale ma raccomandato. Specifica:
- version: versione XML (1.0 o 1.1)
- encoding: codifica caratteri (UTF-8, ISO-8859-1...)
- standalone: se il documento è autonomo (yes/no)
2️⃣ Elemento Radice (Root)
<biblioteca>
<!-- tutto qui dentro -->
</biblioteca>
OBBLIGATORIO. Ogni documento XML deve avere UN SOLO elemento radice che contiene tutti gli altri elementi.
3️⃣ Elementi (Tag)
<libro>
<titolo>1984</titolo>
<autore>Orwell</autore>
</libro>
Gli elementi sono i mattoni di XML. Possono contenere:
- Testo
- Altri elementi (nidificati)
- Attributi
- Una combinazione di questi
4️⃣ Attributi
<libro isbn="978-0451524935" lingua="it">
...
</libro>
Gli attributi forniscono informazioni aggiuntive sull'elemento. Sono sempre coppie nome="valore".
5️⃣ Commenti
<!-- Questo è un commento -->
<!--
I commenti possono
estendersi su più righe
-->
I commenti sono ignorati dal parser XML. Utili per documentare il codice.
6️⃣ CDATA
<codice>
<![CDATA[
if (x < 10 && y > 5) {
alert("Ok!");
}
]]>
</codice>
CDATA permette di inserire testo con caratteri speciali (<, >, &) senza doverli escape.
📏 Regole di Sintassi XML
A differenza di HTML, XML non perdona errori. Un singolo errore di sintassi rende l'intero documento non valido. Il parser si ferma immediatamente.
Le 10 Regole Fondamentali
✅ CORRETTO
<!-- 1. Tag sempre chiusi -->
<nome>Mario</nome>
<!-- 2. Tag vuoti con / -->
<lineaVuota />
<!-- 3. Case-sensitive -->
<Persona>
</Persona>
<!-- 4. Nidificazione corretta -->
<a><b>testo</b></a>
<!-- 5. Attributi tra virgolette -->
<libro titolo="1984">
❌ SBAGLIATO
<!-- 1. Tag non chiuso -->
<nome>Mario
<!-- 2. Tag vuoto senza / -->
<lineaVuota>
<!-- 3. Case diverso -->
<Persona>
</persona>
<!-- 4. Nidificazione errata -->
<a><b>testo</a></b>
<!-- 5. Virgolette mancanti -->
<libro titolo=1984>
- Un solo elemento radice: tutto il contenuto deve essere dentro un unico tag root
- Tutti i tag devono essere chiusi: <tag>...</tag> oppure <tag />
- Case-sensitive: <Libro> e <libro> sono TAG DIVERSI
- Nidificazione corretta: se apri A poi B, devi chiudere prima B poi A
- Attributi tra virgolette: sempre usare " o ' per i valori degli attributi
- Caratteri speciali escaped: < = <, > = >, & = &, " = ", ' = '
- Nomi validi: i nomi possono contenere lettere, numeri, punti, trattini, underscore ma NON spazi
- Non iniziare con xml: i nomi che iniziano con "xml" (qualsiasi maiuscola/minuscola) sono riservati
- Spazi bianchi preservati: gli spazi all'interno del testo sono mantenuti
- Commenti non nidificati: non puoi mettere un commento dentro un altro commento
Entità e Caratteri Speciali
In XML, alcuni caratteri hanno un significato speciale e devono essere "escaped" usando entità:
| Carattere | Entità | Descrizione | Esempio |
|---|---|---|---|
| < | < |
Less than (minore di) | 5 < 10 |
| > | > |
Greater than (maggiore di) | 10 > 5 |
| & | & |
Ampersand (e commerciale) | HTML & CSS |
| " | " |
Virgolette doppie | title="ok" |
| ' | ' |
Apostrofo/virgoletta singola | It's ok |
📚 Esempi Progressivi
<?xml version="1.0" encoding="UTF-8"?>
<libro>
<titolo>Il Signore degli Anelli</titolo>
<autore>J.R.R. Tolkien</autore>
<anno>1954</anno>
<genere>Fantasy</genere>
</libro>
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<libro id="1">
<titolo>1984</titolo>
<autore>George Orwell</autore>
<anno>1949</anno>
<disponibile>true</disponibile>
</libro>
<libro id="2">
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
<anno>1980</anno>
<disponibile>false</disponibile>
</libro>
<libro id="3">
<titolo>Il Piccolo Principe</titolo>
<autore>Antoine de Saint-Exupéry</autore>
<anno>1943</anno>
<disponibile>true</disponibile>
</libro>
</biblioteca>
<?xml version="1.0" encoding="UTF-8"?>
<azienda nome="TechCorp" fondazione="2010">
<dipendenti>
<dipendente id="E001" reparto="IT">
<nome>Mario</nome>
<cognome>Rossi</cognome>
<ruolo>Senior Developer</ruolo>
<contatti>
<email>mario.rossi@techcorp.com</email>
<telefono tipo="mobile">+39 333 1234567</telefono>
</contatti>
<competenze>
<competenza livello="expert">Java</competenza>
<competenza livello="advanced">Python</competenza>
<competenza livello="intermediate">JavaScript</competenza>
</competenze>
</dipendente>
<dipendente id="E002" reparto="HR">
<nome>Laura</nome>
<cognome>Bianchi</cognome>
<ruolo>HR Manager</ruolo>
<contatti>
<email>laura.bianchi@techcorp.com</email>
<telefono tipo="ufficio">+39 02 12345678</telefono>
</contatti>
</dipendente>
</dipendenti>
</azienda>
🤔 Attributi vs Elementi: Quando Usare Cosa?
Uno dei dilemmi più comuni in XML: quando usare un attributo e quando usare un elemento?
📋 Usando Elementi
<persona>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<eta>30</eta>
</persona>
🏷️ Usando Attributi
<persona
nome="Mario"
cognome="Rossi"
eta="30" />
USA GLI ATTRIBUTI per:
- Metadati (ID, versione, tipo, stato)
- Valori semplici e singoli
- Informazioni che non hanno una struttura interna
- Dati che non cambiano frequentemente
USA GLI ELEMENTI per:
- Dati complessi che possono contenere altri elementi
- Valori che possono ripetersi
- Testo lungo o multilinea
- Dati che potrebbero avere una struttura futura
- Quando vuoi più leggibilità
<prodotto id="P123" categoria="Elettronica">
<!-- Metadati come attributi -->
<nome>Smartphone XYZ</nome>
<descrizione>
Smartphone di ultima generazione con
fotocamera da 48MP e batteria da 5000mAh.
</descrizione>
<!-- Dati complessi come elementi -->
<prezzo valuta="EUR">499.99</prezzo>
<specifiche>
<ram>8GB</ram>
<storage>128GB</storage>
<schermo>6.5 pollici AMOLED</schermo>
</specifiche>
</prodotto>
🌐 Namespace XML
I namespace (spazi dei nomi) permettono di evitare conflitti quando si usano elementi con lo stesso nome ma provenienti da vocabolari diversi.
Immagina di avere due vocabolari XML diversi che usano entrambi un tag <titolo>:
- Uno per i libri (titolo del libro)
- Uno per le persone (titolo professionale: Dott., Ing., Prof.)
Come fa il parser a distinguerli? Soluzione: Namespace!
Sintassi dei Namespace
<?xml version="1.0" encoding="UTF-8"?>
<root
xmlns:libro="http://esempio.com/biblioteca"
xmlns:persona="http://esempio.com/persone">
<libro:titolo>1984</libro:titolo>
<libro:autore>George Orwell</libro:autore>
<persona:nome>Mario Rossi</persona:nome>
<persona:titolo>Dott.</persona:titolo>
</root>
Spiegazione:
xmlns:librodefinisce il prefisso "libro" per il namespacexmlns:personadefinisce il prefisso "persona"- Gli URI sono solo identificatori univoci, non devono esistere realmente
- Ora
libro:titoloepersona:titolosono distinti!
Namespace Predefinito
<libro xmlns="http://esempio.com/biblioteca">
<!-- Tutti questi elementi appartengono
al namespace predefinito -->
<titolo>1984</titolo>
<autore>George Orwell</autore>
</libro>
✅ XML Ben Formato vs XML Valido
📝 XML Ben Formato (Well-Formed)
Un documento XML è ben formato se:
- Rispetta tutte le regole di sintassi XML
- Ha un elemento radice
- Tutti i tag sono chiusi correttamente
- Gli attributi sono tra virgolette
- La nidificazione è corretta
✅ Tutti i documenti XML DEVONO essere ben formati
🎯 XML Valido (Valid)
Un documento XML è valido se:
- È ben formato (prerequisito)
- Rispetta una struttura definita (schema)
- Usa solo elementi e attributi permessi
- Rispetta l'ordine e il numero di elementi
💡 La validazione è OPZIONALE ma consigliata
DTD - Document Type Definition
Il DTD è il metodo "classico" per definire la struttura di un documento XML.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE biblioteca [
<!ELEMENT biblioteca (libro+)>
<!ELEMENT libro (titolo, autore, anno)>
<!ELEMENT titolo (#PCDATA)>
<!ELEMENT autore (#PCDATA)>
<!ELEMENT anno (#PCDATA)>
<!ATTLIST libro id ID #REQUIRED>
]>
<biblioteca>
<libro id="L1">
<titolo>1984</titolo>
<autore>George Orwell</autore>
<anno>1949</anno>
</libro>
</biblioteca>
Spiegazione DTD:
(libro+)= uno o più elementi libro(titolo, autore, anno)= questi elementi in questo ordine#PCDATA= Parsed Character Data (testo normale)ID #REQUIRED= attributo id obbligatorio e univoco
⚔️ XML vs JSON
Oggi JSON (JavaScript Object Notation) è spesso preferito a XML per lo scambio di dati, soprattutto nelle API web moderne. Vediamo le differenze:
📄 XML
<persona>
<nome>Mario</nome>
<cognome>Rossi</cognome>
<eta>30</eta>
<hobby>
<hobby>Calcio</hobby>
<hobby>Lettura</hobby>
</hobby>
</persona>
📏 Dimensione: ~160 caratteri
📋 JSON
{
"nome": "Mario",
"cognome": "Rossi",
"eta": 30,
"hobby": [
"Calcio",
"Lettura"
]
}
📏 Dimensione: ~90 caratteri (45% più piccolo!)
| Criterio | XML | JSON |
|---|---|---|
| Leggibilità | Verboso ma chiaro | Più conciso |
| Dimensione | Più grande (30-50% in più) | Più compatto |
| Parsing | Più lento | Più veloce |
| Tipi di dati | Solo stringhe (tutto è testo) | Stringhe, numeri, booleani, null, array, oggetti |
| Attributi | Supportati | Non esistono |
| Namespace | Supportati | Non supportati |
| Commenti | Supportati | Non supportati (ufficialmente) |
| Validazione | DTD, XSD, Schema avanzati | JSON Schema (meno potente) |
| Uso principale | Documenti complessi, config, SOAP | API REST, JavaScript, web moderno |
USA XML quando:
- Hai bisogno di documenti complessi con struttura mista
- Devi usare namespace
- Ti serve validazione rigorosa con schemi complessi
- Lavori con sistemi legacy o SOAP
- Gli attributi sono importanti per la tua struttura dati
- Serve supporto per commenti dettagliati
USA JSON quando:
- Stai costruendo API REST moderne
- Lavori principalmente con JavaScript
- La performance e la dimensione sono critiche
- Hai dati con struttura semplice/media
- Vuoi sintassi più leggera e veloce da parsare
🌍 Casi d'Uso Reali di XML
📰 RSS Feed
<rss version="2.0">
<channel>
<title>Notizie Tech</title>
<link>https://...</link>
<item>
<title>Nuovo AI</title>
<pubDate>...</pubDate>
</item>
</channel>
</rss>
I feed RSS usano XML per distribuire contenuti da blog e siti web.
🎨 SVG (Scalable Vector Graphics)
<svg width="100" height="100">
<circle
cx="50"
cy="50"
r="40"
fill="blue" />
</svg>
SVG usa XML per definire grafica vettoriale scalabile.
🤖 Android Layout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="Hello!" />
</LinearLayout>
Android usa XML per definire le interfacce utente.
⚙️ File di Configurazione
<configuration>
<appSettings>
<add
key="DB_Host"
value="localhost" />
</appSettings>
</configuration>
Molte applicazioni usano XML per memorizzare configurazioni.
📝 Microsoft Office
I file .docx, .xlsx, .pptx sono in realtà archivi ZIP contenenti file XML!
Prova a rinominare un file .docx in .zip e aprirlo: vedrai cartelle piene di file XML che descrivono il documento.
🌐 SOAP Web Services
<soap:Envelope>
<soap:Body>
<GetPrice>
<Item>Laptop</Item>
</GetPrice>
</soap:Body>
</soap:Envelope>
SOAP usa XML per la comunicazione tra web services.
✏️ Editor XML Interattivo
Prova a Scrivere XML!
Scrivi o modifica il codice XML qui sotto e clicca "Valida" per verificare se è ben formato:
🎯 Esercizi Pratici
Compito: Crea un documento XML che rappresenti il menu di un ristorante con:
- Almeno 3 piatti
- Ogni piatto deve avere: nome, descrizione, prezzo, categoria (antipasto/primo/secondo/dolce)
- Usa attributi per ID e categoria
- Usa elementi per il resto
Compito: Crea un documento XML per una playlist musicale con:
- Nome della playlist
- Almeno 5 canzoni
- Ogni canzone: titolo, artista, album, durata, anno
- Aggiungi un attributo "preferita" (true/false) ad alcune canzoni
🎓 Riepilogo Finale
1. Cos'è XML:
- Linguaggio di markup per memorizzare e trasportare dati
- Estensibile: puoi creare i tuoi tag
- Text-based e platform-independent
2. Regole di Sintassi:
- UN SOLO elemento radice
- Tutti i tag DEVONO essere chiusi
- Case-sensitive (maiuscole/minuscole contano)
- Nidificazione corretta obbligatoria
- Attributi sempre tra virgolette
3. Componenti Principali:
- Dichiarazione XML (prolog)
- Elementi (tag)
- Attributi
- Commenti
- CDATA per testo speciale
4. Quando Usare XML:
- Documenti complessi con struttura gerarchica
- Quando servono namespace
- File di configurazione
- Validazione rigorosa necessaria
- Sistemi legacy o SOAP
- Usa nomi descrittivi: <prezzoTotale> è meglio di <pt>
- Sii coerente: se usi camelCase, usalo sempre
- Indenta il codice: rende l'XML molto più leggibile
- Commenta quando necessario: aiuta chi legge dopo
- Valida sempre: usa strumenti online o editor con validazione
- Non esagerare con la profondità: troppi livelli rendono difficile il parsing
- Considera JSON: per API moderne è spesso la scelta migliore
🎉 Complimenti!
Ora conosci XML dalle basi agli argomenti avanzati! XML è uno strumento potente che continua ad essere usato in tantissimi ambiti.
Continua a sperimentare con l'editor interattivo e prova a creare documenti XML per i tuoi progetti!